/**
 *  宏任务 ： setTimeout setInterval 等一系列常见定时器，用户交互事件（宏任务就是特定的这些任务）
 *  微任务 ： 微任务 promise 相关的任务 MotationObserver等 （一样只是一种称呼）
 * 
 * 
 * 
 * ······每个宏任务，都单独关联了一个微任务队列
 * ······异步任务中，同一作用域下 微任务比宏任务先执行
 * ······每个层级的宏任务，都对应了他们的微任务队列，微任务队列遵循了先进先出的原则，当全局同步代码执行完毕后，就开始第一层级的任务。同一层级的微任务
 *       永远先于宏任务执行，并且会在当前层级的宏任务结束前全部执行完毕
 * 
*/


async function async1() {
    console.log("async1_start_2");  // 同步
    await async2();
    console.log("async1_end_6");   // 异步 --微   ---await 函数之后执行
    return 'async_return_8';  // 异步  --微   ---await 函数之后执行
} 
 
async function async2() {
    console.log("async2_3");     // 同步
}
 
console.log("script_start_1");  // 同步
 
setTimeout(function() {
    console.log("setTimeout_9");   // 异步--- 宏任务  ---
}, 0);
 
async1().then(function (message) { console.log(message) }); // 异步 --微
 
new Promise(function(resolve) {
    console.log("promise_4");  // 同步
    resolve();
}).then(function() {
    console.log("promise_7");  // 异步 ---微任务
});
 
console.log("script_end_5");  // 同步



